package 热题100.二叉树.二叉树的最大深度_104_简单;
import 热题100.二叉树.二叉树的中序遍历_94_简单.Solution.TreeNode;

import java.util.ArrayDeque;
import java.util.Deque;

/*
给定一个二叉树 root ，返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

输入：root = [3,9,20,null,null,15,7]
输出：3

示例 2：
输入：root = [1,null,2]
输出：2

提示：
树中节点的数量在 [0, 104] 区间内。
-100 <= Node.val <= 10

思路：
    最大深度，即树的高度也就是层数，采用层序遍历记录数高度就行
* */
public class Solution {
    public static void main(String[] args) {
        TreeNode node3 = new TreeNode(3, null, null);
        TreeNode node2 = new TreeNode(2, node3, null);
        TreeNode root = new TreeNode(1, null, node2);
        System.out.println(maxDepth(root));
    }

    public static int maxDepth(TreeNode root) {
        int ans = 0;
        // 队列记录每一层的节点以及下一层的节点
        Deque<TreeNode> deque = new ArrayDeque<>();
        if (root == null){
            return ans;
        }
        // 先把根节点放入
        deque.offer(root);
        // 队列不为空就一直遍历
        while (!deque.isEmpty()){
            // 由于队列存放当前层和下一层的节点，所以需要记录当前层的大小
            int len = deque.size();
            // len内的节点都是当前层的
            while (len > 0){
                // 出队
                TreeNode node = deque.poll();
                if (node.left != null){
                    deque.offer(node.left);
                }
                if (node.right != null){
                    deque.offer(node.right);
                }
                len --;
            }
            ans ++;
        }
        return ans;
    }
}
